package com.parkinglot.service;


import com.parkinglot.core.Result;
import com.parkinglot.enumeration.DateTypeEnum;
import com.parkinglot.parmeter.OrderPayParm;
import com.parkinglot.parmeter.OrderqueryParm;
import com.parkinglot.pojo.Order;
import com.parkinglot.vo.GarageOrderVo;
import com.parkinglot.vo.OrderqueryVo;

import java.math.BigDecimal;
import java.util.List;

/**
 * (Order)表服务接口
 *
 * @author makejava
 * @since 2020-11-13 14:52:35
 */
public interface OrderService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Order queryById(Integer id);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<Order> queryAllByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param order 实例对象
     * @return 实例对象
     */
   /* OrderqueryVo insert(Order order);*/
    Result insert(Order order);

    /**
     * 修改数据
     *
     * @param order 实例对象
     * @return 实例对象
     */
    Order update(Order order);
    int updateOrder(Order order);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);

  /*  List<OrderqueryVo> countgaraagemoney(OrderqueryParm orderqueryParm);*/

    List<OrderqueryVo> garageweekmoney(OrderqueryParm orderqueryParm);

    OrderqueryVo garagemonthmoney(OrderqueryParm orderqueryParm);

    OrderqueryVo garagemoney(OrderqueryParm orderqueryParm);

    OrderqueryVo countcar(OrderqueryParm orderqueryParm);

    /**
     * 统计各个停车场停车总数
     * @return
     */
    List<GarageOrderVo> countgaragecars();

   List<OrderqueryVo>  allgarageweekmoney( );

    List<OrderqueryVo> garagemonth(OrderqueryParm orderqueryParm);


    OrderqueryVo inserts(Order order);

    OrderqueryVo queryOrder(Order order);


    OrderqueryVo queryByordernum(String ordernumber);

    /**
     * 查询订单表用户最近的停车订单记录  最大的时间
     * @param userid
     * @return
     */
    OrderqueryVo getMaxParkingTimeByUserid(String garageid,String userid,String carnumber);

    Result getordetdetil(Order order);

    /**
     * 查询订单
     * @param order
     * @return
     */
    OrderqueryVo queryBycarnumber(Order order);

    BigDecimal jisuanmoney(String firsttime,String endtime);


    Result wxgopay(OrderPayParm orderPayParm);
    /**
     * 预付款支付成功查询订单
     */
    Result getyufukuanorder(String garageid,String userid);
    OrderqueryVo getyufukuanorders (String garageid,String userid,String carnumber);

    Result countgaraagemoney(OrderqueryParm orderqueryParm);


    /**
     * 根据时间获取收入统计
     * @param dateTypeEnum
     * @return
     */
    Object garagemonth(DateTypeEnum dateTypeEnum);
}